/*
package javase.javase02.thread;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;

*/
/**
 * @author: Gan
 * @date 2021/4/21 0021 15:11
 * @description: 使用多线程实现多个文件一起复制功能，并在控制台显示复制的进度，进度以百分比表示。**
 * * 例如：把文件A复制到E盘某文件夹下，在控制台上显示“XXX文件已复制10%”，“XXX文件已复制20%”……“XXX文件已复制100%”，
 * * “XXX复制完成！1.用多线程实现方式二Runnable去修改昨天的多线程文件复制
 **//*

public class TestCopyFile {
    public static void main(String[] args) {
        CopyFile copyFile = new CopyFile("a.txt", "b.txt");
        Thread t1 = new Thread( copyFile);
        Thread t2 = new Thread( copyFile);
        t1.setName("t1线程");
        t2.setName("t2线程");
        t1.start();
        t2.start();

    }
}

class CopyFile implements Runnable {
    public File oldFile;
    public File newFile;

    public CopyFile(String oldFile, String newFile) {
        this.oldFile = new File(oldFile);
        this.newFile = new File(newFile);
    }

    @Override
    public void run() {
        FileOutputStream fos = null;
        FileInputStream fis = null;
        try {
            fos = new FileOutputStream(newFile);
            fis = new FileInputStream(oldFile);
            //声明一个数组，每次读取的数据放在数组里
            byte[] bytes = new byte[1024];
            //返回每次读取的数据长度
            int readCount = 0;
            //原文件长度
            long len = oldFile.length();
            //声明数据格式为百分比形式
            double temp = 0;
            DecimalFormat decimalFormat = new DecimalFormat("##%");
            while ((readCount = fis.read(bytes)) != -1) {
                fos.write(bytes, 0, readCount);
                //每次读取数据文件长度累加
                temp += readCount;
                //每次读取文件长度占总文件的比例
                double d = temp / len;
                int d1 = (int) d;

                if ((d1*100)%10==0) {

                    System.out.println(Thread.currentThread().getName() + "复制了：" + decimalFormat.format(d));
                }
            }
            System.out.println(Thread.currentThread().getName() + "已经复制完成了");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //释放资源
            try {
                fis.close();
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}*/
